#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int Mod=998244353;
const int Maxn=205;
int n,m;

int bel[Maxn];
int p[Maxn];

struct Matrix{
	int a[Maxn][Maxn];
	inline void clear(){memset(a,0,sizeof a);}
    inline void init(){for(int i=1;i<=n;i++) a[i][i]=1;}
    Matrix(){clear();}
}zh;
inline Matrix operator *(const Matrix x,const Matrix y){
    Matrix z;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                z.a[i][j]=(z.a[i][j]+1ll*x.a[i][k]*y.a[k][j])%Mod;
    return z;
}

int main(){
	freopen("drama.in","r",stdin);
	freopen("drama.out","w",stdout);
    scanf("%d%d",&n,&m);
    /*
    n-1 个状态
    */
    
    p[1]=1;
    for(int i=2;i<=n-1;i++) p[i]=n-i+1;
    zh.a[1][1]=1;
    zh.a[1][p[n-1]]=1;
    bel[1]=1;
    for(int i=2;i<=n-1;i++){
        zh.a[p[i]][1]=1;
        bel[p[i]]=n-i;
        for(int j=max(1,i-1);j<=n-1;j++){
            zh.a[p[i]][p[j]]=1;
        }
    }
    for(int i=1;i<=n-1;i++) zh.a[i][i]=(zh.a[i][i]+bel[i]);
    int b=m-1;
    
    Matrix res;
    res.init();
	while(b){
        if(b&1) res=res*zh;
        zh=zh*zh;
        b>>=1;
    }
    printf("%d\n",res.a[1][1]);
    cout<<"times:"<<(double)clock()*1./CLOCKS_PER_SEC;

    return 0;
}
/*
2 3
4
*/
